package com.qf.util;

import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.model.Bucket;
import com.qf.common.util.StrUtil;


import java.io.ByteArrayInputStream;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;

public class AliOssUtil {
    // Endpoint以杭州为例，其它Region请按实际情况填写。
    private static final String endpoint = "https://oss-cn-beijing.aliyuncs.com";
    // 阿里云主账号AccessKey拥有所有API的访问权限，风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维，请登录RAM控制台创建RAM账号。
    private static final String accessKeyId = "LTAI4GGegSMnYwB3Stw3pcU1";
    private static final String accessKeySecret = "RPyzR4L0pfqhav5IlZQfq8oKf7EFqd";
    private static OSS client;
    private static final int DEFAULT_DAYS = 30;

    static {
        client = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
    }

    /**
     * 创建存储空间
     * @param name 存储空间的名称  唯一*/
    public static boolean createB(String name){
        // 创建存储空间。
        if(StrUtil.checkNoEmpty(name)){
            client.createBucket(name);
            return true;
        }
        return false;
    }
    /**
     * 列出存储空间*/
    public static List<String> listB(){
        List<Bucket> buckets = client.listBuckets();
        List<String> list=new ArrayList<>(buckets.size());
        for (Bucket bucket : buckets) {
            list.add(bucket.getName());
        }
        return list;
    }
    /**
     * 上传内容
     * @param bname 存储空间名称
     * @param objname 对象名称
     * @param data 要保存的内容*/
    public static String upload(String bname,String objname,byte[] data){
        //文件上传
        client.putObject(bname,objname,new ByteArrayInputStream(data));
        //生成访问地址
        return createUrl(bname,objname,DEFAULT_DAYS);
    }
    /**
     * 上传内容
     * @param bname 存储空间名称
     * @param objname 对象名称
     * @param data 要保存的内容
     * @param days 访问链接的有效期*/
    public static String upload(String bname,String objname,int days,byte[] data){
        //文件上传
        client.putObject(bname,objname,new ByteArrayInputStream(data));
        //生成访问地址
        return createUrl(bname,objname,days);
    }
    /**
     * 生成对象的访问链接
     * @param bname 存储空间名称
     * @param objname 对象名称
     * @param days 访问链接的有效期*/
    public static String createUrl(String bname,String objname,int days){
        Calendar calendar=Calendar.getInstance();
        calendar.add(Calendar.DAY_OF_MONTH,days);
        /*
         * 生成访问地址
         * 参数说明
         * 1.存储空间名称
         * 2.对象名称
         * 3.访问地址的有效期
         */
        return client.generatePresignedUrl(bname,objname,calendar.getTime()).toString();
    }


}
